package action
//
//import (
//	"hub.hddznet.com/app/yunjiliang_server/models/views"
//	"github.com/gin-gonic/gin"
//	"gopkg.in/mgo.v2/bson"
//	"hub.hddznet.com/app/yunjiliang_server/service/base"
//	"reflect"
//	"hub.hddznet.com/app/yunjiliang_server/utils"
//	"hub.hddznet.com/app/yunjiliang_server/errors"
//)
//
//func CRUD(r *gin.RouterGroup, url string, db *base.MgoCollection, result interface{}) {
//	r.POST(url+"/get", func(c *gin.Context) {
//		param := struct {
//			Id string `json:"_id" ck:"ck"`
//		}{}
//		Do(c, &param, 1, func() (interface{}, error) {
//			resu := rftNew(result)
//			return resu, db.HDGetOne(bson.M{"_id": param.Id}, resu)
//		})
//	})
//
//	r.POST(url+"/list", func(c *gin.Context) {
//		param := new(views.PageParam)
//		Do(c, param, 1, func() (interface{}, error) {
//			param.ResultType = rftNewSlice(result)
//			return db.HDItems(param)
//		})
//	})
//
//	r.POST(url+"/query", func(c *gin.Context) {
//		param := new(views.QueryParam)
//		Do(c, param, 1, func() (interface{}, error) {
//			rr := rftNewSlice(result)
//			return db.HDQuery(param, rr)
//		})
//	})
//
//	r.POST(url+"/add", func(c *gin.Context) {
//		param := rftNew(result)
//		Do(c, param, 1, func() (interface{}, error) {
//			return param, db.HDInsert(param)
//		})
//	})
//
//	r.POST(url+"/edit", func(c *gin.Context) {
//		param := rftNew(result)
//		Do(c, param, 1, func() (interface{}, error) {
//			id := rftId(param)
//			if id == "" {
//				return nil, errors.MgoSearchIdErr(param)
//			}
//			return param, db.HDUpsertId(id, param)
//		})
//	})
//
//	r.POST(url+"/delete", func(c *gin.Context) {
//		param := rftNew(result)
//		Do(c, param, 1, func() (interface{}, error) {
//			id := rftId(param)
//			if id == "" {
//				return nil, errors.MgoSearchIdErr(param)
//			}
//			return param, db.Remove(bson.M{"_id": id})
//		})
//	})
//}
//
//func CRUD_Query(db *base.MgoCollection, page *views.PageParam) (interface{}, error) {
//	return db.HDItems(page)
//}
//
//func rftNew(obj interface{}) interface{} {
//	return reflect.New(reflect.TypeOf(obj).Elem()).Interface()
//}
//
//func rftNewSlice(obj interface{}) interface{} {
//	return reflect.New(reflect.SliceOf(reflect.TypeOf(obj).Elem())).Elem().Interface()
//}
//
//func rftId(obj interface{}) string {
//	var id = ""
//	utils.RftStruct(obj, func(ty reflect.Type, vl reflect.Value, tag reflect.StructTag) {
//		switch tag.Get("bson") {
//		case "_id":
//			if ty.Kind() == reflect.Ptr {
//				id, _ = vl.Elem().Interface().(string)
//			} else {
//				id, _ = vl.Interface().(string)
//			}
//
//		}
//	})
//	return id
//}
